package com.example.demo.utils.oss;

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;
import com.example.demo.utils.common.StringUtils;

import java.io.InputStream;
import java.net.URL;
import java.util.Date;

public class OssUtils {
    /** oss基础配置 */
    public static final String END_POINT = "http://oss-cn-beijing.aliyuncs.com"; // 固定
    public static final String ACCESS_KEY_ID = "";          // 你的ACCESS_KEY_ID
    public static final String SECRET_ACCESS_KEY = ""; // 你的SECRET_ACCESS_KEY
    public static final String BUCKET_NAME = ""; // 你的BUCKET_NAME
    /** 删除文件的key：bucket + ent_point */
    public static final String DELETE_KEY_REPLACE_STR = "http://" + BUCKET_NAME + ".oss-cn-beijing.aliyuncs.com/";

    /**
     * 文件上传
     * @param inputStream   文件流
     * @param fileName      文件名称
     * @param path          文件存储路径
     * @return
     * @throws Exception
     */
    public static final String upload(InputStream inputStream, String fileName, String path) {
        OSSClient ossClient = new OSSClient(END_POINT, ACCESS_KEY_ID, SECRET_ACCESS_KEY);
        ObjectMetadata metadata = new ObjectMetadata();
        // 上传的文件的长度
        // metadata.setContentLength(is.available());
        // 指定该Object被下载时的网页的缓存行为
        metadata.setCacheControl("no-cache");
        // 指定该Object下设置Header
        metadata.setHeader("Pragma", "no-cache");
        // 指定该Object被下载时的内容编码格式
        metadata.setContentEncoding("utf-8");
        // 文件的MIME，定义文件的类型及网页编码，决定浏览器将以什么形式、什么编码读取文件。如果用户没有指定则根据Key或文件名的扩展名生成，
        // 如果没有扩展名则填默认值application/octet-stream
        //metadata.setContentType(getContentType(file));
        // 指定该Object被下载时的名称（指示MINME用户代理如何显示附加的文件，打开或下载，及文件名称）
        //metadata.setContentDisposition("filename/filesize=" + file + "/" + fileSize + "Byte.");
        metadata.setContentDisposition("inline;filename=" + fileName);
        // 上传文件 (上传文件流的形式)
        //PutObjectResult putResult = ossClient.putObject(bucketName, folder + file, new ByteArrayInputStream(file.getBytes("UTF-8")), metadata);

        /** 上传文件 */
        ossClient.putObject(BUCKET_NAME, path,
                inputStream,
                metadata);

        Date expiration = new Date(new Date().getTime() + 3600L * 1000 * 24 * 365 * 10);
        // 生成URL
        URL url = ossClient.generatePresignedUrl(BUCKET_NAME, path, expiration);
        //保存url
        ossClient.shutdown();
        return StringUtils.isNull(url)? "" : url.toString();
    }

    /** 删除文件 */
    public static void delete(String objectKey) {

        // 创建OSSClient实例。
        OSSClient ossClient = new OSSClient(END_POINT, ACCESS_KEY_ID, SECRET_ACCESS_KEY);

        // 删除文件。
        objectKey = objectKey.replace(DELETE_KEY_REPLACE_STR, "");
        objectKey = objectKey.substring(0, objectKey.indexOf("?"));
        ossClient.deleteObject(BUCKET_NAME, objectKey);

        // 关闭OSSClient。
        ossClient.shutdown();
    }

    /** 获取文件扩展名 */
    public static String getExtensionName(String filename) {
        if ((filename != null) && (filename.length() > 0)) {
            int dot = filename.lastIndexOf('.');
            if ((dot >-1) && (dot < (filename.length() - 1))) {
                return filename.substring(dot + 1);
            }
        }
        return filename;
    }

}
